# -*- coding: utf-8 -*-
from case_util.interface_test import config_parser
import json
from pymysql.pymysql import DB


class Report:
    def add_case_log(self, case_id, status, env):
        isok = DB('db0').Table('case_log').Insert({'case_id': case_id, 'status': status, 'envir': env})
        if isok:
            cm = config_parser('config', 'code.conf', 'CODE', 'SUCCESS')
            return json.dumps({'code': cm['code'], 'message': cm['message']})
        else:
            cm = config_parser('config', 'code.conf', 'CODE', 'SAVE_FAILED')
            return json.dumps({'code': cm['code'], 'message': cm['message']})

    def add_step_log(self, case_log_id, step_id, req_args, response, status, response_time):
        isok = DB('db0').Table('step_log').Insert(
            {'case_log_id': case_log_id, 'status': status, 'step_id': step_id, 'req_args': req_args,
             'response': response, 'response_time': response_time})
        if isok:
            cm = config_parser('config', 'code.conf', 'CODE', 'SUCCESS')
            return json.dumps({'code': cm['code'], 'message': cm['message']})
        else:
            cm = config_parser('config', 'code.conf', 'CODE', 'SAVE_FAILED')
            return json.dumps({'code': cm['code'], 'message': cm['message']})

    def add_step_log_detail(self, step_log_id, check_id, expect, actual, status, content):
        isok = DB('db0').Table('step_log_detail').Insert(
            {'step_log_id': step_log_id, 'status': status, 'check_id': check_id, 'actual': actual, 'expect': expect,
             'content': content})
        if isok:
            cm = config_parser('config', 'code.conf', 'CODE', 'SUCCESS')
            return json.dumps({'code': cm['code'], 'message': cm['message']})
        else:
            cm = config_parser('config', 'code.conf', 'CODE', 'SAVE_FAILED')
            return json.dumps({'code': cm['code'], 'message': cm['message']})

    def get_case_logs(self):
        case_logs = DB('db0').Select('id,status,envir,create_time').From('case_log').GetAll()
        if case_logs:
            cm = config_parser('config', 'code.conf', 'CODE', 'SUCCESS')
            return json.dumps({'code': cm['code'], 'message': cm['message'], 'data': case_logs})
        else:
            cm = config_parser('config', 'code.conf', 'CODE', 'SAVE_FAILED')
            return json.dumps({'code': cm['code'], 'message': cm['message'], 'data': {}})

    def get_step_log_by_case_log_id(self, case_log_id):
        step_logs = DB('db0').Select(
            'l.id id,l.status status,s.description step_description,s.en_alias step_en_alias').From('step_log l').Join(
            'steps s', 'l.step_id=s.id').Where('case_log_id=?', [case_log_id]).GetAll()
        if step_logs:
            cm = config_parser('config', 'code.conf', 'CODE', 'SUCCESS')
            return json.dumps({'code': cm['code'], 'message': cm['message'], 'data': step_logs})
        else:
            cm = config_parser('config', 'code.conf', 'CODE', 'SAVE_FAILED')
            return json.dumps({'code': cm['code'], 'message': cm['message'], 'data': {}})

    def get_step_log_detail_by_step_log_id(self, step_log_id):
        step_log_detail = DB('db0').Select(
            'd.expect expect,d.actual actual,d.status status,l.req_args req_args,l.response_time response_time,l.response response').From(
            'step_log_detail d').Join('step_log l', 'd.step_log_id=l.id').Where('d.step_log_id=?',
                                                                                [step_log_id]).GetAll()
        if step_log_detail:
            cm = config_parser('config', 'code.conf', 'CODE', 'SUCCESS')
            return json.dumps({'code': cm['code'], 'message': cm['message'], 'data': step_log_detail})
        else:
            cm = config_parser('config', 'code.conf', 'CODE', 'SAVE_FAILED')
            return json.dumps({'code': cm['code'], 'message': cm['message'], 'data': {}})
